home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / source code vol 1.adf / STARROUTS / 3DSTARS.S next >
Text File  |  1999-09-26  |  5KB  |  248 lines

  1. org  $40000
  2. load $40000
  3. execbase = 4
  4. forbid   = -132
  5. permit   = -138
  6. bitplane = $60000
  7. j:     bsr.S    clear_bitplanes 
  8.     move.l    execbase.W,a6 
  9.     jsr    forbid(a6) 
  10.     lea    $dff000,a6 
  11.     lea    coplist(pc),a0 
  12.     move.l    a0,$0080(a6) 
  13.     clr.w    $0088(a6) 
  14.     move.w    #$0020,$0096(a6) 
  15.     bsr.S    prepare_starmovement 
  16. main_loop: 
  17.     cmp.b   #$ff,$dff006
  18.     bne     main_loop
  19.     bsr.S    move_stars 
  20.     btst    #6,$bfe001 
  21.     bne.S    main_loop 
  22.     move.l    4,a5
  23.     move.l    156(a5),A1
  24.     move.l    38(A1),$0080(a6) 
  25.     move.w    #$8020,$0096(a6) 
  26.     move.l    execbase.W,a6 
  27.     jsr    permit(a6) 
  28.     rts 
  29. clear_bitplanes: 
  30.     lea    bitplane,a0 
  31.     move.w    #$5dbf,d0 
  32. clear_loop: 
  33.     clr.b    (a0)+ 
  34.     dbf    d0,clear_loop 
  35.     rts 
  36.  
  37. prepare_starmovement: 
  38.     move.w    #$a00,d6 
  39.     move.l    #$00fff000,rnd1 
  40.     lea    pos_control(pc),a2 
  41.     lea    retter,a1 
  42. prepare_loop: 
  43.     bsr.L    get_a_new_star 
  44.     move.l    #bitplane,$00(a1,d6.W) 
  45.     move.l    #$6,$04(a1,d6.W) 
  46.     sub.w    #$0020,d6 
  47.     bne.S    prepare_loop 
  48.     lea    CMPundCOLOR(pc),a4 
  49.     rts 
  50.  
  51. move_stars: 
  52.     move.w    #$a00,d6 
  53. move_loop: 
  54.     move.l    0(a1,d6.W),a0 
  55.     move.l    4(a1,d6.W),d0 
  56.     bclr    d0,(a0) 
  57.     bclr    d0,$1f40(a0) 
  58.     bclr    d0,$3e80(a0) 
  59. goon:    bsr.L    do_move 
  60.     bsr.L    compute_adress 
  61.     move.l    a0,0(a1,d6.W) 
  62.     move.l    d0,4(a1,d6.W) 
  63.     move.l    8(a2,d6.W),d4 
  64.     lsr.w    #1,d4 
  65.     bcc.S    not_set1 
  66.     bset    d0,(a0) 
  67. not_set1: 
  68.     lsr.w    #1,d4 
  69.     bcc.S    not_set2 
  70.     bset    d0,$1f40(a0) 
  71. not_set2: 
  72.     lsr.w    #1,d4 
  73.     bcc.S    not_set3 
  74.     bset    d0,$3e80(a0) 
  75. not_set3: 
  76.     sub.w    #$0020,d6 
  77.     bne.S    move_loop 
  78.     rts 
  79. restoreadder:
  80.     lea    bitplane,a0 
  81.     add.l    #$1f40/2,a0
  82.     add.l   #20,a0
  83.     move.l  #78,d0
  84.     move.l  #2,d1
  85. loop1:
  86.     move.l  d1,d2
  87. loop2:  
  88.     clr.b   -(a0)
  89.     clr.b   $1f40(a0)
  90.     clr.b   $1f40*2(a0)
  91.     dbra    d2,loop2
  92.     move.l  d1,d2
  93. loop3:    sub.l   #40,a0
  94.     clr.b    (a0)
  95.     clr.b   $1f40(a0)
  96.     clr.b   $1f40*2(a0)
  97.     dbra    d2,loop3
  98.  
  99.     move.l  d1,d2
  100.     add.l   #1,d2
  101. loop5:  clr.b    (a0)+
  102.     clr.b   $1f40(a0)
  103.     clr.b   $1f40*2(a0)
  104.     dbra    d2,loop5
  105.  
  106.     move.l  d1,d2
  107.     add.l   #1,d2
  108.  
  109. loop6:    add.l   #40,a0
  110.     clr.b    (a0)
  111.     clr.b   $1f40(a0)
  112.     clr.b   $1f40*2(a0)
  113.     dbra    d2,loop6
  114.     add.l   #2,d1
  115.     dbra    d0,loop1
  116.     move.l  #0,adder
  117.     rts
  118. do_move:move.l    12(a2,d6.W),d3 
  119.     move.l    16(a2,d6.W),d4 
  120.     add.l    0(a2,d6.W),d3 
  121.     add.l    4(a2,d6.W),d4 
  122.     tst.l    d3 
  123.     bmi.L    get_a_new_star 
  124.     tst.l    d4 
  125.     bmi.L    get_a_new_star 
  126.     cmp.l    #$01400000,d3 
  127.     bge.L    get_a_new_star 
  128.     cmp.l    #$00c80000,d4 
  129.     bge.L    get_a_new_star 
  130.     move.l    d3,0(a2,d6.W) 
  131.     move.l    d4,4(a2,d6.W) 
  132.     move.l    20(a2,d6.W),d3 
  133.     move.l    24(a2,d6.W),d4 
  134.     add.l    8(a1,d6.W),d3 
  135.     add.l    12(a1,d6.W),d4 
  136.     move.l    d3,8(a1,d6.W) 
  137.     move.l    d4,12(a1,d6.W) 
  138.     move.l    28(a2,d6.W),d5 
  139.     move.l    0(a4,d5.L),d1 
  140.     cmp.l    d1,d3 
  141.     bge.S    new_speed_and_color 
  142.     cmp.l    d1,d4
  143.     ble.S    end_move_star 
  144. new_speed_and_color: 
  145.     move.l    20(a2,d6.W),d0 
  146.     move.l    24(a2,d6.W),d1 
  147.     lsr.l    #1,d0 
  148.     move.l    d0,d2 
  149.     asl.l    #1,d0 
  150.     add.l    d2,d0 
  151.     lsr.l    #1,d1 
  152.     move.l    d1,d2 
  153.     asl.l    #1,d1 
  154.     add.l    d2,d1 
  155.     move.l    64(a4,d5.L),d2
  156.     move.l    d2,8(a2,d6.W) 
  157.     add.l    #4,28(a2,d6.W) 
  158.     move.l    d0,20(a2,d6.W) 
  159.     move.l    d1,24(a2,d6.W) 
  160. new_position: 
  161.     move.l    20(a2,d6.W),d0 
  162.     move.l    d0,12(a2,d6.W) 
  163.     move.l    24(a2,d6.W),d0 
  164.     move.l    d0,16(a2,d6.W) 
  165.     btst    #1,20(a1,d6.W) 
  166.     beq.S    not_negative 
  167.     not.l    12(a2,d6.W) 
  168. not_negative: 
  169.     btst    #2,20(a1,d6.W) 
  170.     beq.S    end_move_star 
  171.     not.l    16(a2,d6.W) 
  172. end_move_star:
  173.      rts 
  174. get_a_new_star: 
  175.     clr.l    28(a2,d6.W) 
  176.     clr.l    8(a1,d6.W) 
  177.     clr.l    12(a1,d6.W) 
  178.     bsr.L    zufall 
  179.     clr.l    8(a2,d6.W) 
  180.     bsr.S    zufall 
  181.     and.l    #$00030000,d0 
  182.     add.l    #$009e0000,d0 
  183.     move.l    d0,0(a2,d6.W) 
  184.     bsr.S    zufall 
  185.     and.l    #$00030000,d0 
  186.     add.l    #$00620000,d0 
  187.     move.l    d0,4(a2,d6.W) 
  188.     bsr.S    zufall 
  189.     and.l    #$ffff,d0 
  190.     move.l    d0,20(a2,d6.W) 
  191.     bsr.S    zufall 
  192.     and.l    #$ffff,d0 
  193.     move.l    d0,24(a2,d6.W) 
  194.     bsr.S    zufall 
  195.     move.l    d0,20(a1,d6.W) 
  196.     bra.L    new_position 
  197. compute_adress: 
  198.     lea    bitplane,a0 
  199.     clr.l    d1 
  200.     move.l    0(a2,d6.W),d0 
  201.     swap    d0 
  202.     move.w    d0,d1 
  203.     and.l    #7,d0 
  204.     eor.w    #7,d0 
  205.     divu    #8,d1 
  206.     move.l    4(a2,d6.W),d2 
  207.     swap    d2 
  208.     and.l    #$ff,d2 
  209.     mulu    #$28,d2 
  210.     add.w    d2,d1 
  211.     add.w    d1,a0 
  212.     rts 
  213. zufall:    move.l    rnd1(pc),a3 
  214.     move.l    (a3),d0 
  215.     add.l    #$5000,a3 
  216.     move.l    (a3),d1 
  217.     eor.l    d1,d0 
  218.     move.l    rnd2(pc),d1 
  219.     add.l    #$42f54f32,d0 
  220.     eor.l    d1,d0 
  221.     add.w    $dff006,d0 
  222.     eor.l    #$dff006,d0 
  223.     move.l    d0,rnd2 
  224.     add.l    #2,rnd1 
  225.     rts 
  226.  
  227. adder:
  228.     dc.l 0
  229. rnd1:    dc.l 0 
  230. rnd2:    dc.l 0 
  231. CMPundCOLOR: 
  232. dc.l $000c0000,$00180000,$00240000,$00300000,$003c0000,$00480000 
  233. dc.l $00540000,$00600000,$006c0000,$00780000,$00840000,$00900000 
  234. dc.l $009c0000,$00a80000,$00b40000,$00b80000 
  235. dc.l $00000001,$00000002,$00000003,$00000004,$00000005,$00000006 
  236. dc.l $00000007,$00000007,$00000007,$00000007,$00000007,$00000007 
  237. dc.l $00000008,$00000008,$00000008,$00000008 
  238.  
  239. coplist: 
  240. dc.l $008e2c61,$0090ffc1,$00920038,$009400d0,$01003200,$01080000 
  241. dc.l $010a0000,$00e00006,$00e20000,$00e40006,$00e61f40,$00e80006 
  242. dc.l $00ea3e80,$01800000,$01820222,$01840444,$01860666,$01880999 
  243. dc.l $018a0bbb,$018c0ddd,$018e0fff 
  244. dc.l $fffffffe 
  245.  
  246. pos_control:    blk.l $1020,0 
  247. retter:        blk.l $1020,0 
  248.